package com.wiscom.portal.demo.controller;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletRequest;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.validation.BindException;
import org.springframework.web.portlet.bind.PortletRequestDataBinder;
import org.springframework.web.portlet.mvc.SimpleFormController;

import com.wiscom.portal.demo.entity.Jc;
import com.wiscom.portal.demo.service.JcService;
import com.wiscom.util.lang.StringUtils;

/**
 * 提供表单提交支持的抽象控制器。你能够对表单进行建模，通过从控制器 里得到的Command对象来填充表单。
 * 	在用户提交表单后， SimpleFormController会绑定字段、进行验证， 然后把对象返回给控制器来做下一步的动作。
 * author:yyu date:2011-7-19
 */
public class JcEditController extends SimpleFormController implements InitializingBean{

	private JcService jcService;//引入jcService接口，通过pxgl.jc.xml自动匹配其实现类
	
	/**
	 * 当render类型请求发送时首先调用formBackingObject方法。
	 * author:yyu date:2011-7-19
	 */
	@Override
	protected Object formBackingObject(PortletRequest request) throws Exception {
		Jc jc = (Jc)super.formBackingObject(request);  //根据xml中commandClass产生一个对象
		String jcdm = request.getParameter("jcdm");    //从jsp中获取参数
		if(StringUtils.isEmpty(jcdm)){                 //当该字符串为空时
			jc.setIsEditing(Boolean.FALSE);            
		} else {
			jc = jcService.getJc(jcdm);                //不为空，从数据库中获取该对象
		}
		return jc;
	}
	
	/**
	 * 初始化bean的时候执行,必须实现 InitializingBean接口
	 * author:yyu date:2011-7-19
	 */
	@Override
	public void afterPropertiesSet() throws Exception {
		setSessionForm(true);                         //将sessionForm设为true,否则执行action类型请求时，又会调用formBackingObject方法
	}
	
	/**
	 * 当action类型请求发送时首先调用onSubmitAction方法。
	 * author:yyu date:2011-7-19
	 */
	@Override
	protected void onSubmitAction(ActionRequest request, ActionResponse response, Object command, BindException errors)
			throws Exception {
		Jc jc = (Jc)command;						 //将表单根据commandClass填充至对象中			
		if(jc.getIsEditing()){						 
			jcService.update(jc);					 //编辑保存后更新数据
		} else {
			jcService.insert(jc);					 //新建保存后插入数据
		}
		response.setRenderParameter("action", "query"); //完成后执行其他控制器
	}
	
	/**
	 * 注册需要的类型转换器 
	 * author:yyu date:2011-7-19
	 */
	@Override
	protected void initBinder(PortletRequest request, PortletRequestDataBinder binder) throws Exception {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		binder.registerCustomEditor(Date.class, null, new CustomDateEditor(dateFormat, true));
		super.initBinder(request, binder);
	}


	public void setJcService(JcService jcService) {
		this.jcService = jcService;
	}
}
